/**
 *@Name: CCo100
 *@Description: Clase que manipula tabla de contabilización co100 y co101
 *@Version: 1.01.7
 *@Author: Andrés Albán
 */
package contabilidad;

import conexion.CConexion;
import java.io.IOException;
import java.sql.*;
import utilitario.CFecha;

public class CCo100 extends CConexion {

    private String compania = null;
    private String ano = null;
    private String mes = null;
    private String numeroAsiento = null;
    private String tipoComprobante = null;
    private String numeroComprobante = null;
    private String fecha = null;
    private String origen = null;
    private String totalDebito = null;
    private String totalCredito = null;
    private String descripcion = null;
    private String codigoDiario = null;
    private String tipoCambio = null;
    private String estado = null;
    private String autorizado = null;
    private String indicadorImpresion = null;
    private String indicadorAnulacion = null;
    private String usuarioActual = null;
    private String fechaActual = null;

    /**Constructor*/
    public CCo100() {
        super();
        CFecha fechaSistema = new CFecha();
        this.compania = login.getCompaniaActual();
        this.tipoCambio = "1.00";
        this.estado = "A";
        this.autorizado = "S";
        this.indicadorImpresion = "N";
        this.indicadorAnulacion = "N";
        this.fechaActual = fechaSistema.getFechaCompleta();
        this.usuarioActual = login.getUsuarioLogin();
    }

    /**Crear cabecera facturas*/
    public void crearCo100Facturas(CDco100 dco, ResultSet rsFactura, String noas) throws SQLException {
        this.ano = rsFactura.getString("fa100fefa").substring(0, 4);
        this.mes = rsFactura.getString("fa100fefa").substring(5, 7);
        this.numeroAsiento = noas;
        this.tipoComprobante = dco.getTipoComprobante();
        this.numeroComprobante = rsFactura.getString("fa100nofa");
        this.fecha = rsFactura.getString("fa100fefa");
        this.origen = dco.getOrigen();
        this.totalDebito = "0.00";
        this.totalCredito = "0.00";
        this.descripcion = "FAC: " + rsFactura.getString("fa100nocl");
        this.codigoDiario = dco.getCodigoDiario();
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(dco, rsFactura);
    }

    public void crearCo100CuentasCobrar(CDco100 dco, ResultSet rsCuentasCobrar, String noas, String totalDebito, String totalCredito) throws SQLException {
        this.ano = rsCuentasCobrar.getString("cxc100fech").substring(0, 4);
        this.mes = rsCuentasCobrar.getString("cxc100fech").substring(5, 7);
        this.numeroAsiento = noas;
        this.tipoComprobante = dco.getTipoComprobante();
        this.numeroComprobante = rsCuentasCobrar.getString("cxc100noco");
        this.fecha = rsCuentasCobrar.getString("cxc100fech");
        this.origen = dco.getOrigen();
        this.totalDebito = totalDebito;
        this.totalCredito = totalCredito;
        this.descripcion = "CXC: " + rsCuentasCobrar.getString("cxc100cocl");
        this.codigoDiario = dco.getCodigoDiario();
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(dco, rsCuentasCobrar);
    }

    public void crearCo100Inventarios(CDco100 dco, ResultSet rsInventarios, String noas, String noco) throws SQLException, IOException, ClassNotFoundException {
        this.ano = rsInventarios.getString("egr100fech").substring(0, 4);
        this.mes = rsInventarios.getString("egr100fech").substring(5, 7);
        this.numeroAsiento = noas;
        this.tipoComprobante = dco.getTipoComprobante();
        this.origen = dco.getOrigen();
        this.codigoDiario = dco.getCodigoDiario();
        this.descripcion = dco.getDescripcion();
        this.numeroAsiento = noas;
        this.numeroComprobante = noco;
        this.totalDebito = "0.00";
        this.totalCredito = "0.00";
        this.fecha = rsInventarios.getString("egr100fech");
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + this.numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        //System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(dco, rsInventarios);
        stncCrearCo100.close();

    }

    public void crearCo100CobrosCxc(CDco100 dco, ResultSet rsCobro, String noas, String cocl) throws SQLException {
        rsCobro.next();
        this.ano = rsCobro.getString("ca100fech").substring(0, 4);
        this.mes = rsCobro.getString("ca100fech").substring(5, 7);
        this.numeroAsiento = noas;
        this.tipoComprobante = dco.getTipoComprobante();
        this.numeroComprobante = rsCobro.getString("ca100yearord");
        this.fecha = rsCobro.getString("ca100fech");
        this.origen = dco.getOrigen();
        this.totalDebito = "0.00";
        this.totalCredito = "0.00";
        /////////////////////////////////
        String sqlBuscaCliente = "select * from cl100 where cl100cocl='" + cocl + "'";
        Statement stncBuscaCliente = this.getConexion().createStatement();
        ResultSet rsBuscaCliente = stncBuscaCliente.executeQuery(sqlBuscaCliente);
        rsBuscaCliente.next();
        /////////////////////////////////
        this.descripcion = "CXC: " + cocl + " " + rsBuscaCliente.getString("cl100nocl");
        this.codigoDiario = dco.getCodigoDiario();
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(dco, rsCobro);
    }

    public void crearCo100TransaccionesCuentasCobrar(CDco100 dco, String[][] resultado, String noas, String cocl, String fecha, String notaCredito, String timo, String comp) throws SQLException {
        this.ano = fecha.substring(0, 4);
        this.mes = fecha.substring(5, 7);
        this.numeroAsiento = noas;
        this.tipoComprobante = dco.getTipoComprobante();
        this.numeroComprobante = notaCredito;
        this.fecha = fecha;
        this.origen = dco.getOrigen();
        this.totalDebito = "0.00";
        this.totalCredito = "0.00";
        /////////////////////////////////
        String sqlBuscaCliente = "select * from cl100 where cl100cocl='" + cocl + "'";
        Statement stncBuscaCliente = this.getConexion().createStatement();
        ResultSet rsBuscaCliente = stncBuscaCliente.executeQuery(sqlBuscaCliente);
        rsBuscaCliente.next();
        /////////////////////////////////
        if (timo.equalsIgnoreCase("D")) {
            this.descripcion = "CXC. AJU.: " + cocl + " " + rsBuscaCliente.getString("cl100nocl") + "/COMP.: " + comp;
        } else {
            this.descripcion = "CXC. NCR.: " + cocl + " " + rsBuscaCliente.getString("cl100nocl") + "/COMP.: " + comp;
        }
        this.codigoDiario = dco.getCodigoDiario();
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(dco, resultado);
    }

    public void crearCo100TransaccionesCuentasPagar(CDco100 dco, String[][] resultado, String noas, String copr, String fecha, String notaDebito, String timo, String comp) throws SQLException {
        this.ano = fecha.substring(0, 4);
        this.mes = fecha.substring(5, 7);
        this.numeroAsiento = noas;
        this.tipoComprobante = dco.getTipoComprobante();
        this.numeroComprobante = notaDebito;
        this.fecha = fecha;
        this.origen = dco.getOrigen();
        this.totalDebito = "0.00";
        this.totalCredito = "0.00";
        /////////////////////////////////
        String sqlBuscaProveedores = "select * from pr100 where pr100copr='" + copr + "'";
        Statement stncBuscaProveedores = this.getConexion().createStatement();
        ResultSet rsBuscaProveedores = stncBuscaProveedores.executeQuery(sqlBuscaProveedores);
        rsBuscaProveedores.next();
        /////////////////////////////////
        if (timo.equalsIgnoreCase("D")) {
            this.descripcion = "CXP. NDB.: " + copr + " " + rsBuscaProveedores.getString("pr100copr") + "/COMP.: " + comp;
        } else {
            this.descripcion = "CXP. AJU.: " + copr + " " + rsBuscaProveedores.getString("pr100copr") + "/COMP.: " + comp;
        }
        this.codigoDiario = dco.getCodigoDiario();
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(dco, resultado);
    }

    public void crearCo100IngresoCxp(CDco100 dco, String[][] resultado, String noas, String copr, String fecha, String nore) throws SQLException {
        this.ano = fecha.substring(0, 4);
        this.mes = fecha.substring(5, 7);
        this.numeroAsiento = noas;
        this.tipoComprobante = dco.getTipoComprobante();
        this.numeroComprobante = nore;
        this.fecha = fecha;
        this.origen = dco.getOrigen();
        this.totalDebito = "0.00";
        this.totalCredito = "0.00";
        /////////////////////////////////
        String sqlBuscaCliente = "select * from pr100 where pr100copr='" + copr + "'";
        Statement stncBuscaCliente = this.getConexion().createStatement();
        ResultSet rsBuscaCliente = stncBuscaCliente.executeQuery(sqlBuscaCliente);
        rsBuscaCliente.next();
        /////////////////////////////////
        this.descripcion = "CXP: " + copr + " " + rsBuscaCliente.getString("pr100nopr");
        this.codigoDiario = dco.getCodigoDiario();
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(dco, resultado);
    }

    public void crearCo100IngresoCxpRetenciones(CDco100 dco, String[][] resultado, String noas, String copr, String fecha, String nore, String desc) throws SQLException {
        this.ano = fecha.substring(0, 4);
        this.mes = fecha.substring(5, 7);
        this.numeroAsiento = noas;
        this.tipoComprobante = dco.getTipoComprobante();
        this.numeroComprobante = nore;
        this.fecha = fecha;
        this.origen = dco.getOrigen();
        this.totalDebito = "0.00";
        this.totalCredito = "0.00";
        this.descripcion = desc;
        this.codigoDiario = dco.getCodigoDiario();
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(dco, resultado);
    }

    public void crearCo100Movimientos(String[] datos, String[][] matriz) throws SQLException {
        this.ano = datos[6].substring(0, 4);
        this.mes = datos[6].substring(5, 7);
        this.numeroAsiento = datos[3];
        this.tipoComprobante = datos[4];
        this.numeroComprobante = datos[5];
        this.fecha = datos[6];
        this.origen = datos[7];
        this.totalDebito = "0.00";
        this.totalCredito = "0.00";
        this.descripcion = datos[10];
        this.codigoDiario = datos[11];
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(datos, matriz, "", "");
    }

    public void crearCo100Cheques(String[] datos, String[][] matriz) throws SQLException {
        this.ano = datos[7].substring(0, 4);
        this.mes = datos[7].substring(5, 7);
        this.numeroAsiento = datos[13];
        this.tipoComprobante = datos[14];
        this.numeroComprobante = "0";
        this.fecha = datos[7];
        this.origen = datos[15];
        this.totalDebito = "0.00";
        this.totalCredito = "0.00";
        this.descripcion = datos[12];
        this.codigoDiario = datos[16];
        this.estado = "P";
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(matriz);
    }

    public void crearCo100DepositosCaja(String[] datos, String[][] matriz) throws SQLException {
        this.ano = datos[0].substring(0, 4);
        this.mes = datos[0].substring(5, 7);
        this.numeroAsiento = datos[1];
        this.tipoComprobante = datos[2];
        this.numeroComprobante = datos[3];
        this.fecha = datos[0];
        this.origen = datos[4];
        this.totalDebito = "0.00";
        this.totalCredito = "0.00";
        this.descripcion = datos[5];
        this.codigoDiario = datos[6];
        this.estado = "C";
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(matriz);
    }

    public void crearCo100TransaccionesBancos(String[] datos, String[][] matriz) throws SQLException {
        this.ano = datos[0];
        this.mes = datos[1];
        this.numeroAsiento = datos[2];
        this.tipoComprobante = datos[3];
        this.numeroComprobante = datos[4];
        this.fecha = datos[5];
        this.origen = datos[6];
        this.totalDebito = "0.00";
        this.totalCredito = "0.00";
        this.descripcion = datos[7];
        this.codigoDiario = datos[8];
        String sqlCrearCo100 = "insert into co100 values('" + compania + "'," + ano + "," + mes + ",'" + numeroAsiento + "','" + tipoComprobante + "','" + numeroComprobante + "','" + fecha + "','" + origen + "'," + totalDebito + "," + totalCredito + ",'" + descripcion + "','" + codigoDiario + "','" + tipoCambio + "','" + estado + "','" + autorizado + "','" + indicadorImpresion + "','" + indicadorAnulacion + "','" + usuarioActual + "','" + fechaActual + "','" + usuarioActual + "','" + fechaActual + "')";
        System.out.println(sqlCrearCo100);
        Statement stncCrearCo100 = this.getConexion().createStatement();
        stncCrearCo100.execute(sqlCrearCo100);
        crearCo101(matriz);
    }

    private void crearCo101(CDco100 dco, ResultSet resultado) throws SQLException {
        double credito = 0.00;
        double debito = 0.00;
        for (int i = 0; i < dco.getNumeroDco101Filas(); i++) {
            String[] fila = new String[26];
            fila[0] = this.compania;
            fila[1] = this.ano;
            fila[2] = this.mes;
            fila[3] = this.numeroAsiento;
            fila[4] = String.valueOf(i + 1); //numero de lista
            fila[5] = this.numeroComprobante;
            fila[6] = this.fecha;
            fila[7] = this.codigoDiario;
            fila[8] = dco.getDco101()[i][2];//Nivel 1 cuenta
            fila[9] = dco.getDco101()[i][3];//Nivel 2 cuenta
            fila[10] = dco.getDco101()[i][4];//Nivel 3 cuenta
            fila[11] = dco.getDco101()[i][5];//Nivel 4 cuenta
            fila[12] = dco.getDco101()[i][6];//Nivel 5 cuenta
            fila[13] = dco.getDco101()[i][7];//Nivel 1 centro costos
            fila[14] = dco.getDco101()[i][8];//Nivel 1 centro costos
            fila[15] = dco.getDco101()[i][9];//Nivel 1 centro costos
            fila[16] = "N";
            fila[17] = "1.00";
            fila[18] = dco.getDco101()[i][10];
            if (fila[18].equalsIgnoreCase("C")) {
                fila[19] = "-" + resultado.getString(dco.getDco101()[i][11]);
                credito += Double.parseDouble(fila[19]);

            } else if (fila[18].equalsIgnoreCase("D")) {
                fila[19] = resultado.getString(dco.getDco101()[i][11]);
                debito += Double.parseDouble(fila[19]);
            }
            fila[20] = String.valueOf(Double.parseDouble(fila[19]) * Double.parseDouble(fila[17]));
            fila[21] = this.descripcion;
            fila[22] = this.usuarioActual;
            fila[23] = this.fechaActual;
            fila[24] = this.usuarioActual;
            fila[25] = this.fechaActual;
            String sqlCrearCo101 = "insert into co101 values('" + fila[0] + "'," + fila[1] + "," + fila[2] + ",'" + fila[3] + "'," + fila[4] + ",'" + fila[5] + "','" + fila[6] + "','" + fila[7] + "'," + fila[8] + "," + fila[9] + ",'" + fila[10] + "','" + fila[11] + "','" + fila[12] + "','" + fila[13] + "','" + fila[14] + "','" + fila[15] + "','" + fila[16] + "'," + fila[17] + ",'" + fila[18] + "'," + fila[19] + "," + fila[20] + ",'" + fila[21] + "','" + fila[22] + "','" + fila[23] + "','" + fila[24] + "','" + fila[25] + "')";
            System.out.println(sqlCrearCo101);
            Statement stncCrearCo101 = this.getConexion().createStatement();
            stncCrearCo101.execute(sqlCrearCo101);
        }
        barreDetalle();
        actualizaCo100(numeroAsiento, codigoDiario, debito, credito);
    }

    private void crearCo101(String[][] resultado) throws SQLException {
        double credito = 0.00;
        double debito = 0.00;
        for (int contador = 1; contador < resultado.length; contador++) {
            String[] fila = new String[26];
            fila[0] = this.compania;
            fila[1] = this.ano;
            fila[2] = this.mes;
            fila[3] = this.numeroAsiento;
            fila[4] = String.valueOf(contador); //numero de lista
            fila[5] = this.numeroComprobante;
            fila[6] = this.fecha;
            fila[7] = this.codigoDiario;
            fila[8] = resultado[contador][0];//Nivel 1 cuenta
            fila[9] = resultado[contador][1];//Nivel 2 cuenta
            fila[10] = resultado[contador][2];//Nivel 3 cuenta
            fila[11] = resultado[contador][3];//Nivel 4 cuenta
            fila[12] = resultado[contador][4];//Nivel 5 cuenta
            fila[13] = resultado[contador][6];//Nivel 1 centro costos
            fila[14] = resultado[contador][7];//Nivel 1 centro costos
            fila[15] = resultado[contador][8];//Nivel 1 centro costos
            fila[16] = "N";
            fila[17] = "1.00";
            if (Double.parseDouble(resultado[contador][11]) == 0.00 && Double.parseDouble(resultado[contador][10]) == 0.00) {
                continue;

            } else if (Double.parseDouble(resultado[contador][11]) != 0.00) {
                fila[18] = "C";
                fila[19] = "-" + resultado[contador][11];
                credito += Double.parseDouble(fila[19]);

            } else if (Double.parseDouble(resultado[contador][10]) != 0.00) {
                fila[18] = "D";
                fila[19] = resultado[contador][10];
                debito += Double.parseDouble(fila[19]);
            }
            fila[20] = String.valueOf(Double.parseDouble(fila[19]) * Double.parseDouble(fila[17]));
            fila[21] = this.descripcion;
            fila[22] = this.usuarioActual;
            fila[23] = this.fechaActual;
            fila[24] = this.usuarioActual;
            fila[25] = this.fechaActual;
            String sqlCrearCo101 = "insert into co101 values('" + fila[0] + "'," + fila[1] + "," + fila[2] + ",'" + fila[3] + "'," + fila[4] + ",'" + fila[5] + "','" + fila[6] + "','" + fila[7] + "'," + fila[8] + "," + fila[9] + ",'" + fila[10] + "','" + fila[11] + "','" + fila[12] + "','" + fila[13] + "','" + fila[14] + "','" + fila[15] + "','" + fila[16] + "'," + fila[17] + ",'" + fila[18] + "'," + fila[19] + "," + fila[20] + ",'" + fila[21] + "','" + fila[22] + "','" + fila[23] + "','" + fila[24] + "','" + fila[25] + "')";
            System.out.println(sqlCrearCo101);
            Statement stncCrearCo101 = this.getConexion().createStatement();
            stncCrearCo101.execute(sqlCrearCo101);
        }
        barreDetalle();
        actualizaCo100(numeroAsiento, codigoDiario, debito, credito);
    }

    private void crearCo101(CDco100 dco, String[][] resultado) throws SQLException {
        double credito = 0.00;
        double debito = 0.00;
        for (int contador = 1; contador < resultado.length; contador++) {
            String[] fila = new String[26];
            fila[0] = this.compania;
            fila[1] = this.ano;
            fila[2] = this.mes;
            fila[3] = this.numeroAsiento;
            fila[4] = String.valueOf(contador); //numero de lista
            fila[5] = this.numeroComprobante;
            fila[6] = this.fecha;
            fila[7] = this.codigoDiario;
            fila[8] = resultado[contador][0];//Nivel 1 cuenta
            fila[9] = resultado[contador][1];//Nivel 2 cuenta
            fila[10] = resultado[contador][2];//Nivel 3 cuenta
            fila[11] = resultado[contador][3];//Nivel 4 cuenta
            fila[12] = resultado[contador][4];//Nivel 5 cuenta
            fila[13] = resultado[contador][6];//Nivel 1 centro costos
            fila[14] = resultado[contador][7];//Nivel 1 centro costos
            fila[15] = resultado[contador][8];//Nivel 1 centro costos
            fila[16] = "N";
            fila[17] = "1.00";
            if (Double.parseDouble(resultado[contador][11]) == 0.00 && Double.parseDouble(resultado[contador][10]) == 0.00) {
                continue;

            } else if (Double.parseDouble(resultado[contador][11]) != 0.00) {
                fila[18] = "C";
                fila[19] = "-" + resultado[contador][11];
                credito += Double.parseDouble(fila[19]);

            } else if (Double.parseDouble(resultado[contador][10]) != 0.00) {
                fila[18] = "D";
                fila[19] = resultado[contador][10];
                debito += Double.parseDouble(fila[19]);
            }
            fila[20] = String.valueOf(Double.parseDouble(fila[19]) * Double.parseDouble(fila[17]));
            fila[21] = this.descripcion;
            fila[22] = this.usuarioActual;
            fila[23] = this.fechaActual;
            fila[24] = this.usuarioActual;
            fila[25] = this.fechaActual;
            String sqlCrearCo101 = "insert into co101 values('" + fila[0] + "'," + fila[1] + "," + fila[2] + ",'" + fila[3] + "'," + fila[4] + ",'" + fila[5] + "','" + fila[6] + "','" + fila[7] + "'," + fila[8] + "," + fila[9] + ",'" + fila[10] + "','" + fila[11] + "','" + fila[12] + "','" + fila[13] + "','" + fila[14] + "','" + fila[15] + "','" + fila[16] + "'," + fila[17] + ",'" + fila[18] + "'," + fila[19] + "," + fila[20] + ",'" + fila[21] + "','" + fila[22] + "','" + fila[23] + "','" + fila[24] + "','" + fila[25] + "')";
            System.out.println(sqlCrearCo101);
            Statement stncCrearCo101 = this.getConexion().createStatement();
            stncCrearCo101.execute(sqlCrearCo101);
        }
        barreDetalle();
        actualizaCo100(numeroAsiento, codigoDiario, debito, credito);
    }

    public void crearCo101(String[] datos, String[][] resultado, String usuarioAdicion, String fechaAdicion) throws SQLException {
        double credito = 0.00;
        double debito = 0.00;
        for (int contador = 1; contador < resultado.length; contador++) {
            String[] fila = new String[26];
            fila[0] = this.compania;
            fila[1] = datos[1];
            fila[2] = datos[2];
            fila[3] = datos[3];
            fila[4] = String.valueOf(contador); //numero de lista
            fila[5] = datos[5];
            fila[6] = datos[6];
            fila[7] = datos[11];
            fila[8] = resultado[contador][0];//Nivel 1 cuenta
            fila[9] = resultado[contador][1];//Nivel 2 cuenta
            fila[10] = resultado[contador][2];//Nivel 3 cuenta
            fila[11] = resultado[contador][3];//Nivel 4 cuenta
            fila[12] = resultado[contador][4];//Nivel 5 cuenta
            fila[13] = resultado[contador][6];//Nivel 1 centro costos
            fila[14] = resultado[contador][7];//Nivel 1 centro costos
            fila[15] = resultado[contador][8];//Nivel 1 centro costos
            fila[16] = "N";
            fila[17] = "1.00";
            if (Double.parseDouble(resultado[contador][11]) != 0.00) {
                fila[18] = "C";
                fila[19] = "-" + resultado[contador][11];
                credito += Double.parseDouble(fila[19]);

            } else if (Double.parseDouble(resultado[contador][10]) != 0.00) {
                fila[18] = "D";
                fila[19] = resultado[contador][10];
                debito += Double.parseDouble(fila[19]);
            }
            fila[20] = String.valueOf(Double.parseDouble(fila[19]) * Double.parseDouble(fila[17]));
            fila[21] = datos[10];

            if (usuarioAdicion.isEmpty() && fechaAdicion.isEmpty()) {
                fila[22] = this.usuarioActual;
                fila[23] = this.fechaActual;
            } else {
                fila[22] = usuarioAdicion;
                fila[23] = fechaAdicion;
            }
            fila[24] = this.usuarioActual;
            fila[25] = this.fechaActual;
            String sqlCrearCo101 = "insert into co101 values('" + fila[0] + "'," + fila[1] + "," + fila[2] + ",'" + fila[3] + "'," + fila[4] + ",'" + fila[5] + "','" + fila[6] + "','" + fila[7] + "'," + fila[8] + "," + fila[9] + ",'" + fila[10] + "','" + fila[11] + "','" + fila[12] + "','" + fila[13] + "','" + fila[14] + "','" + fila[15] + "','" + fila[16] + "'," + fila[17] + ",'" + fila[18] + "'," + fila[19] + "," + fila[20] + ",'" + fila[21] + "','" + fila[22] + "','" + fila[23] + "','" + fila[24] + "','" + fila[25] + "')";
            System.out.println(sqlCrearCo101);
            Statement stncCrearCo101 = this.getConexion().createStatement();
            stncCrearCo101.execute(sqlCrearCo101);
        }
        barreDetalle();
        actualizaCo100(datos[3], datos[11], debito, credito);
    }

    private void actualizaCo100(String numeroAsiento, String codigoDiario, double debito, double credito) throws SQLException {
        Statement stncActualizarCo100 = this.getConexion().createStatement();
        String sqlActualizarCo100 = "update co100 set co100tdbn=" + debito + ", co100tcrn=" + credito + " where co100noas='" + numeroAsiento + "' and co100codi='" + codigoDiario + "'";
        System.out.println(sqlActualizarCo100);
        stncActualizarCo100.executeUpdate(sqlActualizarCo100);
        stncActualizarCo100.close();
    }

    public void actualizaCo100(String numeroAsiento, String codigoDiario, String fecha, String descripcion) throws SQLException {
        Statement stncActualizarCo100 = this.getConexion().createStatement();
        String anioNuevo = fecha.substring(0, 4);
        String mesNuevo = fecha.substring(5, 7);
        String sqlActualizarCo100 = "update co100 set co100ano='" + anioNuevo + "', co100mes='" + mesNuevo + "', co100desc='" + descripcion + "', co100fech='" + fecha + "', co100lomo='" + this.usuarioActual + "', co100femo='" + this.fechaActual + "' where co100noas='" + numeroAsiento + "' and co100codi='" + codigoDiario + "'";
        System.out.println(sqlActualizarCo100);
        stncActualizarCo100.executeUpdate(sqlActualizarCo100);
        stncActualizarCo100.close();
    }

    public void actualizaCo100Cheques(String numeroAsiento, String codigoDiario, String fecha, String descripcion) throws SQLException {
        Statement stncActualizarCo100 = this.getConexion().createStatement();
        String anioNuevo = fecha.substring(0, 4);
        String mesNuevo = fecha.substring(5, 7);
        String sqlActualizarCo100 = "update co100 set co100ano='" + anioNuevo + "', co100mes='" + mesNuevo + "', co100desc='" + descripcion + "', co100fech='" + fecha + "', co100lomo='" + this.usuarioActual + "', co100femo='" + this.fechaActual + "' where co100noas='" + numeroAsiento + "' and co100codi='" + codigoDiario + "'";
        System.out.println(sqlActualizarCo100);
        stncActualizarCo100.executeUpdate(sqlActualizarCo100);
        stncActualizarCo100.close();
    }

    private void barreDetalle() throws SQLException {
        String sqlSacaDetalle = "select * from co101 where co101nocia='" + this.compania + "' and co101ano='" + this.ano + "' and co101mes='" + this.mes + "' and co101noas='" + this.numeroAsiento + "' and co101codi='" + this.codigoDiario + "'";
        Statement stncSacaDetalle = this.getConexion().createStatement();
        ResultSet rsSacaDetalle = stncSacaDetalle.executeQuery(sqlSacaDetalle);
        while (rsSacaDetalle.next()) {
            if (rsSacaDetalle.getString("co101valn").equalsIgnoreCase("0.00") && rsSacaDetalle.getString("co101vale").equalsIgnoreCase("0.00")) {
                String sqlBorraDetalle = "delete from co101 where co101nocia='" + rsSacaDetalle.getString("co101nocia") + "' and co101ano='" + rsSacaDetalle.getString("co101ano") + "' and co101mes='" + rsSacaDetalle.getString("co101mes") + "' and co101noas='" + rsSacaDetalle.getString("co101noas") + "' and co101codi='" + rsSacaDetalle.getString("co101codi") + "' and co101niv1='" + rsSacaDetalle.getString("co101niv1") + "' and co101niv2='" + rsSacaDetalle.getString("co101niv2") + "' and co101niv3='" + rsSacaDetalle.getString("co101niv3") + "' and co101niv4='" + rsSacaDetalle.getString("co101niv4") + "' and co101niv5='" + rsSacaDetalle.getString("co101niv5") + "'";
                Statement stncBorraDetalle = this.getConexion().createStatement();
                stncBorraDetalle.execute(sqlBorraDetalle);
                System.out.println(rsSacaDetalle.getString("co101valn"));
            }
        }
    }

    public void eliminar(String ano, String mes, String noas) throws SQLException {
        Statement stnc = this.getConexion().createStatement();
        String sql = "delete from co100 WHERE co100nocia = '" + login.getCompaniaActual() + "' and co100ano = '" + ano + "' and co100mes = '" + mes + "' and co100noas = '" + noas + "'";
        System.out.println(sql);
        stnc.executeUpdate(sql);
        String sql2 = "delete from co101 WHERE co101nocia = '" + login.getCompaniaActual() + "' and co101ano = '" + ano + "' and co101mes = '" + mes + "' and co101noas = '" + noas + "'";
        System.out.println(sql2);
        stnc.executeUpdate(sql2);
    }

    public void insertar(String ano, String mes, String noas, String tico, String noco, String fech, String orig, String tdbn, String tcrn, String desc, String codi, String tica, String esta, String auto, String inim, String inan, String load) throws SQLException {
        Statement stnc = this.getConexion().createStatement();
        String sql = "INSERT INTO co100(co100nocia,co100ano,co100mes,co100noas,co100tico,co100noco,co100fech,co100orig,co100tdbn,co100tcrn,co100desc,co100codi,co100tica,co100esta,co100auto,co100inim,co100inan,co100load,co100fead,co100lomo,co100femo) VALUES('" + login.getCompaniaActual() + "','" + ano + "','" + mes + "','" + noas + "','" + tico + "','" + noco + "','" + fech + "','" + orig + "','" + tdbn + "','" + tcrn + "','" + desc + "','" + codi + "','" + tica + "','" + esta + "','" + auto + "','" + inim + "','" + inan + "','" + load + "','" + fech + "','" + load + "','" + fech + "')";
        System.out.println(sql);
        stnc.executeUpdate(sql);
    }

    public ResultSet buscar(String ano, String mes, String noas, String tico, String noco, String fech, String desc, String codi, String orig) throws SQLException {
        Statement stnc = this.getConexion().createStatement();
        String sql = "SELECT co100ano,co100mes,co100noas,co100tico,co100noco,co100orig,co100codi,co100fech,co100desc FROM co100 where co100nocia = '" + login.getCompaniaActual() + "'";
        String sql1 = " and co100ano ='" + ano + "'";
        if (ano.isEmpty()) {
            sql1 = "";
        }
        String sql2 = " and co100mes  ='" + mes + "'";
        if (mes.isEmpty()) {
            sql2 = "";
        }
        String sql3 = " and co100noas ='" + noas + "'";
        if (noas.isEmpty()) {
            sql3 = "";
        }
        String sql4 = " and co100tico ='" + tico + "'";
        if (tico.isEmpty()) {
            sql4 = "";
        }
        String sql5 = " and co100noco  ='" + noco + "'";
        if (noco.isEmpty()) {
            sql5 = "";
        }
        String sql6 = " and co100fech  ='" + fech + "'";
        if (fech.isEmpty()) {
            sql6 = "";
        }
        String sql7 = " and co100codi  ='" + codi + "'";
        if (codi.isEmpty()) {
            sql7 = "";
        }
        String sql8 = " and co100desc like '%" + desc + "%'";
        if (desc.isEmpty()) {
            sql8 = "";
        }
        String sql9 = " and co100orig = '" + orig + "'";
        if (orig.isEmpty()) {
            sql9 = "";
        }
        sql = sql + sql1 + sql2 + sql3 + sql4 + sql5 + sql6 + sql7 + sql8 + sql9 + " order by co100noas";
        System.out.println(sql);
        return stnc.executeQuery(sql);
    }

    public void eliminarCo100(String ano, String mes, String noas) throws SQLException {
        Statement stnc = this.getConexion().createStatement();
        String sql = "delete from co100 WHERE co100nocia = '" + login.getCompaniaActual() + "' and co100ano = '" + ano + "' and co100mes = '" + mes + "' and co100noas = '" + noas + "'";
        System.out.println(sql);
        stnc.executeUpdate(sql);
    }

    public void eliminarCo101(String ano, String mes, String noas) throws SQLException {
        Statement stnc = this.getConexion().createStatement();
        String sql2 = "delete from co101 WHERE co101nocia = '" + login.getCompaniaActual() + "' and co101ano = '" + ano + "' and co101mes = '" + mes + "' and co101noas = '" + noas + "'";
        System.out.println(sql2);
        stnc.executeUpdate(sql2);
    }

    public ResultSet buscarCabeceraPorNumeroDeAsiento(String noas) throws SQLException {
        Statement stncBuscarNoas = this.getConexion().createStatement();
        String sqlBuscarNoas = "SELECT * FROM co100 where co100nocia = '" + login.getCompaniaActual() + "' and co100noas ='" + noas + "'";
        ResultSet rsBuscarNoas = stncBuscarNoas.executeQuery(sqlBuscarNoas);
        return rsBuscarNoas;
    }

    public ResultSet buscarCabeceraPorNumeroDeAsiento(String anio, String mes, String noas) throws SQLException {
        Statement stncBuscarNoas = this.getConexion().createStatement();
        String sqlBuscarNoas = "select * from co100 where co100nocia = '" + compania + "' and co100ano = '" + anio + "' and co100mes = '" + mes + "' and co100noas = '" + noas + "'";
        ResultSet rsBuscarNoas = stncBuscarNoas.executeQuery(sqlBuscarNoas);
        return rsBuscarNoas;
    }

    public ResultSet buscarDetallePorNumeroDeAsiento(String noas) throws SQLException {
        Statement stncBuscarNoas = this.getConexion().createStatement();
        String sqlBuscarNoas = "SELECT * FROM co101 where co101nocia = '" + login.getCompaniaActual() + "' and co101noas ='" + noas + "'";
        ResultSet rsBuscarNoas = stncBuscarNoas.executeQuery(sqlBuscarNoas);
        return rsBuscarNoas;
    }

    public String[] totales(String ano, String mes, String noas) throws SQLException {
        String[] A = new String[2];
        Statement stnc = this.getConexion().createStatement();
        ResultSet rs;
        rs = stnc.executeQuery("select co100tdbn,co100tcrn from co100 where co100nocia ='" + login.getCompaniaActual() + "' and co100ano ='" + ano + "' and co100mes = '" + mes + "' and co100noas ='" + noas + "'");
        rs.next();
        A[0] = rs.getString(1);
        A[1] = rs.getString(2);
        return A;
    }

    public boolean existeNumeroDeDocumento(String origen, String tipoComprobante, String numeroDocumento) throws SQLException {
        boolean resultado = true;
        String sqlDocumento = "select co100noco from co100 where co100nocia='" + compania + "' and co100orig='" + origen + "' and co100tico='" + tipoComprobante + "' and co100noco='" + numeroDocumento + "'";
        Statement stncDocumento = this.getConexion().createStatement();
        ResultSet rsDocumento = stncDocumento.executeQuery(sqlDocumento);
        if (rsDocumento.next()) {
            resultado = true;
        } else {
            resultado = false;
        }
        return resultado;
    }

    public void actualizarCabeceraCheques(String egreso, String anio, String mes, String noas) throws SQLException {
        Statement stncUpCo100 = this.getConexion().createStatement();
        String sqlUpCo100 = "update co100 set co100noco = '" + egreso + "', co100esta = 'C' where co100nocia = '" + compania + "' and co100ano = '" + anio + "' and co100mes = '" + mes + "' and co100noas = '" + noas + "'";
        stncUpCo100.executeUpdate(sqlUpCo100);
        stncUpCo100.close();
        Statement stncUpCo101 = this.getConexion().createStatement();
        String sqlUpCo101 = "update co101 set co101noco = '" + egreso + "' where co101nocia = '" + compania + "' and co101ano = '" + anio + "' and co101mes = '" + mes + "' and co101noas = '" + noas + "'";
        stncUpCo101.executeUpdate(sqlUpCo101);
        stncUpCo101.close();
    }

    public void anular(String anio, String mes, String noas, String tico) throws SQLException {
        String sqlAnulaCo101 = "update co101 set co101valn = '0.00', co101vale = '0.00' where co101nocia = '" + compania + "' and co101ano = '" + anio + "' and co101mes = '" + mes + "' and co101noas = '" + noas + "'";
        Statement stncAnulaCo101 = this.getConexion().createStatement();
        stncAnulaCo101.executeUpdate(sqlAnulaCo101);
        stncAnulaCo101.close();
        String sqlAnulaCo100 = "update co100 set co100esta = 'A', co100tdbn = '0.00', co100tcrn = '0.00', co100inan = 'S' where co100nocia = '" + compania + "'" + " and co100ano = '" + anio + "'" + " and co100mes = '" + mes + "'" + " and co100noas = '" + noas + "'" + " and co100tico = '" + tico + "'";
        Statement stncAnulaCo100 = this.getConexion().createStatement();
        stncAnulaCo100.executeUpdate(sqlAnulaCo100);
        stncAnulaCo100.close();
    }

    public String numeroComprobante(String numeroAsiento) throws SQLException {
        String sqlNoComprobante = "select co100noco from co100 where co100nocia='" + compania + "' and co100noas='" + numeroAsiento + "'";
        Statement stncNoComprobante = this.getConexion().createStatement();
        ResultSet rsNoComprobante = stncNoComprobante.executeQuery(sqlNoComprobante);
        rsNoComprobante.next();
        String numeroComprobante = rsNoComprobante.getString("co100noco");
        rsNoComprobante.close();
        stncNoComprobante.close();
        return numeroComprobante;
    }
}
